<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>React的生命周期</title>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
</head>
<body>

<!--this.setState 会重新刷新UI-->

<!--componentWillMount  在渲染前调用,在客户端也在服务端- 挂载的时候->

<!--componentDidMount : 在第一次渲染后调用，只在客户端。之后组件已经生成了对应的DOM结构，可以通过this.getDOMNode()来进行访问。
如果你想和其他JavaScript框架一起使用，可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。-->



   <!--shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。-->
   <!--可以在你确认不需要更新组件时使用-->

   <!--componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用-->

   <!--componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。-->

   <!--componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。-->

   <!--componentWillUnmount在组件从 DOM 中移除之前立刻被调用。 即将卸载的时候调用 比如移除移除请求-->



  <div id="example"></div>
  <script type="text/babel">

    class HelloMessage extends React.Component{
        constructor(props){
            super(props);
            this.state = {
                opacity : 1.0
            };
        }

        //生命周期 加载完成
        componentDidMount(){
            console.log('Component DID MOUNT!')
            this.timer = setInterval(
                function () {
                   var  opacity = this.state.opacity;
                   opacity = opacity -0.05;
                   if(opacity< 0.1){
                       opacity = 1.0
                   }

                   this.setState({
                       opacity: opacity
                   });
                }.bind(this),100
            );
        }

        componentWillMount() {
            console.log('Component WILL MOUNT!')
        }

        componentWillReceiveProps(newProps) {
            console.log('Component WILL RECEIVE PROPS!')
        }
        shouldComponentUpdate(newProps, newState) {
            return true;
        }
        componentWillUpdate(nextProps, nextState) {
            console.log('Component WILL UPDATE!');
        }
        componentDidUpdate(prevProps, prevState) {
            console.log('Component DID UPDATE!')
        }
        componentWillUnmount() {
            console.log('Component WILL UNMOUNT!')
        }

        render(){
            return(
                <div>
                    <h1 style={{opacity:this.state.opacity}}>显示hello{this.props.name}</h1>
                </div>
            );
        }
    }

    ReactDOM.render(
        <HelloMessage name ='子彬' />,
        document.getElementById('example')
    );




  </script>

</body>
</html>